\section{Abstract Syntax Tree}
\label{section:AbstractSyntaxTree}
	When the parser passes the program, an abstract syntax tree (AST) is created. An AST represents the source program's phrase structure. An AST consists of subtrees which in our language correspond to the following phrases: expressions, statements, blocks, definitions, libraries and the CLUBs nodes. The leaves of the syntax tree are literals, identifiers and
	operators. Comments and blank space are not represented in the AST, because they have
	no effect on the board game. Interestingly, punctuation and brackets are not in the AST either.
	This is because their only role is to separate and enclose phrases -- something that is already clear from the structure of the AST. See appendix \ref{app:TTT-AST} for a draft of the AST from a Tic-Tac-Toe game.
	
	The root of the tree is a CLUBsNode. All CLUBs board games have an AST with a CLUBsNode
	as a root, if this is not the case a syntax error will occure. In the TTT AST, the root's first child's node is a Library node, referencing the library \textit{LineFunctions}. Another child node of the CLUBsNode
	is a Cell Definition node. The Cell Definition node is a block node, which starts at \{ and ends at \}. The block node in this case only contains one child statement node, which is
	an assignment. This Assign Statement
	contains an Identifier and an Integer Expression node. In general an Assign
	Statement node doesn't need to contain an Integer Expression node, it can contain any kind of expression node, as long as the type of the expression matches that of the identifier. The last root
	child node in this AST is a Board Definition node, which is a Block node. The
	Block node contains an Assign Statement and a Call Statement. The Assign Statement
	contains an Identifier and a VName Expression. This sets the reference of the Identifier to point to the object described by the VName Expression. The Call Statement contains an Identifier and
	two Integer Expressions. Interestingly, the Board Definition node child is a Call Statement and not a Call Expression. This is because a
	Call Expression holds information about the return type, as well as a Call Statement. Since we do not use the
	return value of this call, because it is not part of an expression, we do not need to wrap the Call Statement in a Call Expression.